/** @file         lzm_demo_netif_linux.c
 *  @brief        简要说明
 *  @details      详细说明
 *  @author       lzm
 *  @date         2023-10-02 21:27:56
 *  @version      v1.0
 *  @copyright    Copyright By lizhuming, All Rights Reserved
 *
 **********************************************************
 *  @LOG 修改日志:
 **********************************************************
*/

#include "lwip/opt.h"

#include "lwip/netif.h"
#include "lwip/ip_addr.h"
#include "lwip/tcpip.h"
#include "netif/tapif.h"
#include "lwip/tcpip.h"
#include "lwip/sockets.h"

#include "lzm_logal_api.h"

#define lzm_app_netif_log(...)  LZM_LOG_TAG(LZM_LOG_LVL_DEBUG, "ANti", ##__VA_ARGS__)

static struct netif linux_netif = {0};

pthread_t linux_netif_thread = NULL;

void init_default_netif(const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw)
{
	netif_add(&linux_netif, ipaddr, netmask, gw, NULL, tapif_init, tcpip_input);

	netif_set_default(&linux_netif);

	netif_set_link_up(&linux_netif);
  	netif_set_up(&linux_netif);

	char ip4_addr_str[16] = {0};
	inet_ntop(AF_INET, &(linux_netif.ip_addr), ip4_addr_str, sizeof(ip4_addr_str));
	lzm_app_netif_log("ip is %s", ip4_addr_str);
}

void default_netif_poll(void)
{
	tapif_poll(&linux_netif);
}

void lwip_netif_linux_thread(void *args)
{
	ip4_addr_t ipaddr = {0};
	ip4_addr_t netmask = {0};
	ip4_addr_t gw = {0};

	lzm_app_netif_log("enter\r\n\r\n");

	sleep(3);
	ip4_addr_set_zero(&ipaddr);
	ip4_addr_set_zero(&netmask);
	ip4_addr_set_zero(&gw);

	IP4_ADDR(&ipaddr, 192,168,1,200);
	IP4_ADDR(&netmask, 255,255,255,0);
	IP4_ADDR(&gw, 192,168,1,1);

	init_default_netif(&ipaddr, &netmask, &gw);

	while(1)
	{
		default_netif_poll();
	}
}

void lzm_demo_lwip_netif_linux_init(void)
{
	lzm_app_netif_log("enter");

	pthread_create(&linux_netif_thread, NULL, (void *)lwip_netif_linux_thread, (void *)NULL); // creat thread。注意 64bit 机器地址是8byte的
	sleep(5);
	
}


